ML `}  X c0C)HCCH Mhhݩh `eCDiCD`  RyHP   * 1H0芢@) Y0.Ș` i #(PMR\ \b Pgi 0  % @ / ՠ`d   0DDԝLN;; Shooting stars by Dennis Fox;; Page zero usagePBASE=$CB;POINTERS TO...MBASE=$CD;MISSILES,BASE2=$CF;PLAYER}1,BASE3=$D1;PLAYER2,BASE4=$D3;PLAYER3ADDR=$D5;2-BYTE POINTER; Page 6 usageX=$600Y=$601XM=$610YM=$6}20DM=$630T1=$640T2=$641TI1=$642TI2=$643HIT=$645LIFE=$650TI3=$660TI4=$6A0ELF=$6A1SF1=$6A2STI}ME=$6A3; Operating system equatesATTRAC=$4D;ATTRACT MODE POINTERPCOLR0=$2C0;PLAYER COLORSPCOLR1=$2C1PCOLR2=}$2C2PCOLR3=$2C3COLOR0=$2C4;PLAYFIELD COLORSCOLOR1=$2C5COLOR2=$2C6COLOR3=$2C7COLOR4=$2C8SDMCTL=$22F;DM }A CONTROLSDLSTL=$230;DISP LIST POINTERSDLSTH=$231STICK0=$278;JOYSTICKSTRIG0=$284;STICK BUTTONHITCLR=$D01E; }COLLISION CLEARHPOSP0=$D000;P/M HOR. POSITIONSHPOSP1=$D001HPOSP2=$D002HPOSP3=$D003HPOSM0=$D004HPOSM1=$D005 }HPOSM2=$D006HPOSM3=$D007M1PL=$D009;COLLISION REGISTERSM2PL=$D00AM3PL=$D00BP1PL=$D00DP2PL=$D00EP3PL=$ }D00FGRACTL=$D01D;GRAPHIC CONTROLCONSOL=$D01F;CONSOLE BUTTONSAUDF1=$D200;AUDIO CONTROLSAUDC1=$D201AUDF2=$D20 }2AUDC2=$D203RANDOM=$D20A;RANDOM #PMBASE=$D407;P/M START ADDRSETVBV=$E45C;VERT BLANK SET VECTORXITVBV=$E462};VERT BLANK EXIT; set up screen and display list ORG $2000SSTARLDX#9LDA#$FFSETTBSTASCRNA,X;SET TOP...STASCR}NC,X;AND BOTTOM...DEX;OF SCREENBPLSETTBLDX#41LDA#SCRNB/256;POINT TO...STAADDR+1;MIDDLE OF SCREENLDA#SCR}NB&255STAADDRSETMIDLDY#9MIDLPLDAMIDBYT,Y;COPY MIDDLE BYTES...STA(ADDR),Y;TO SCREEN RAMDEYBPLMIDLPLDAADD}R;NOW ADD 10 BYTES...CLC;TO POINT TO...ADC#10;NEXT LINESTAADDRLDAADDR+1ADC#0STAADDR+1DEX;ANOTHER LIN}E?BPLSETMID;YES!LDA#DLIST&255;POINT TOSTASDLSTL;DISPLAYLDA#DLIST/256;LISTSTASDLSTHLDA#$00;SET LOW BYTE}S...STAMBASE;OF P/M POINTERSSTAPBASESTABASE2STABASE3STABASE4LDA#$33;NOW SET HI BYTESSTAMBASE+1;TO POI}NT TOLDA#$34;VARIOUS P/M AREASSTAPBASE+1LDA#$35STABASE2+1LDA#$36STABASE3+1LDA#$37STABASE4+1; Set p}layers starting positionSTART2LDA#16;INITIALIZE TIMERSSTATI1STATI2STATI4LDA#$00STAELFSTASF1STASTIME}STATI3LDA#5;START W/5 LIVESSTALIFESTARTLDA#180;SET UP...STAX;ASTRONAUT XLDARANDOM;NOW GET...LSRA;RA}NDOM #CLC;AND SET UPADC#55;ASTRONAUT YSTAY; Set missles horizontal positionLDX#$00;GET RANDOM...L1LDARAN}DOM;HORIZONTALLSRA;POSITION,LSRA;MAKE SURE IT'SADC#50;ON SCREEN,STAXM,X;STORE ITINX;NEXT MISSILECPX#6};ALL DONE?BNEL1;NOT YET!; Set missles vertical positionLDX#$00;START W/MISSILE 0L2TXA;GET MISSILE #ASLA;M}ULTIPLY...ASLA;MISSILE...ASLA;NUMBER...ASLA;BY 32,ASLA;MAKE SURE IT'S...ADC#55;ON SCREEN,STAYM,X;AND }STORE IT!INX;NEXT MISSILECPX#6;ALL DONE?BNEL2;NOT YET!; Set missiles' starting directionsLDX#$00L3LDARAN}DOM;GET RANDOM...AND#$03;DIRECTIONSTADM,X;AND STOREINX;NEXT MISSILECPX#6;ALL DONE?BNEL3;NOT YET!; Set }up player missile graphics; Single line resolutionLDA#$30;POINT TO P/M AREASTAPMBASELDA#62;TURN ON SCREENSTAS}DMCTLLDA#3;SET P/M GRAPHICSSTAGRACTLLDA#$00;NOW CLEAR OUT...TAY;ALL MISSILESA1STA(PBASE),Y;AND PLAYERSST}A(MBASE),YSTA(BASE2),YSTA(BASE3),YSTA(BASE4),YINYBNEA1LDA#$00;NO COLLISION!STAHITSTA HITCLRLDA#$46 };SET UP COLORSSTAPCOLR0LDA#15STAPCOLR1STAPCOLR2STAPCOLR3LDA#150STACOLOR1LDA#54STACOLOR2LDA#$F8!}STACOLOR0LDA#3STAT2LDA#$07;NOW START UP...LDX#VBI/256;OUR VERTICAL BLANK...LDY#VBI&255;INTERRUPT!JSRS"}ETVBV; The game begins hereBACKLDACONSOL;CHECK CONSOLE KEYSCMP#6;START PRESSED?BNEJOY2;NOPE! JMPDEATH;GO#} TO RESTART!; Read joystickJOY2LDASTICK0;GET ASTRONAUT...AND#1;DIRECTIONBNEO1DECY;UPO1LDASTICK0AND#$0$}8BNEO2INCX;RIGHTO2LDASTICK0AND#$02BNEO3INCY;DOWNO3LDASTICK0AND#$04BNEO4DECX;LEFTO4LDAX;G%}ET ASTRO. XCMP#200;TOO FAR RIGHT?BNEO5;IT'S OKDECX;TOO FAR!O5LDAXCMP#50;TOO FAR LEFT?BNEO6;OK.INCX&};TOO FAR!O6LDAY;GET ASTRO. YCMP#52;TOO FAR UP?BNEO7;OK.INCY;TOO FAR!O7LDAYCMP#200;TOO FAR DOWN?BNEO'}8;OK.DECY;TOO FAR!; Put astronaut on playfieldO8LDAX;GO AHEAD AND SET...STAHPOSP0;HOR. POSITIONLDX#$00;NO(}W COPY THE...LDYY;ASTRONAUT IMAGE...B1LDAANAUT,X;INTO PLAYER 1STA(PBASE),YINXINYCPX#19BNEB1; Move miss)}ilesLDX#$00D0LDADM,X;GET MISSILE DIR.BNED1INCXM,X;RIGHT...DECYM,X;AND UPD1LDADM,XCMP#1BNED2INC*}XM,X;RIGHT...INCYM,X;AND DOWN!D2LDADM,XCMP#2BNED3DECXM,X;LEFT...INCYM,X;AND DOWN!D3LDADM,XCMP#3+}BNEDO1DECXM,X;LEFT...DECYM,X;AND UP!DO1INX;NEXT MISSILECPX#6;ALL DONE?BNED0;NO, DO OTHERS!; Check if m,}issile has hit wallLDX#$00C0LDAXM,X;GET X POS.CMP#202;TOO FAR RIGHT?BNEC1;IT'S OK.LDADM,X;IT'S TOO FAR,-}BNEDI1;WE MUST REVERSELDA#3;THE DIRECTION!STADM,XCLCBCCC1DI1LDA#2STADM,XC1LDAXM,X;GET X POS.CMP#48.};TOO FAR LEFT?BNEC2;OK.LDADM,X;REVERSE DIRECTION!CMP#2BEQDI2LDA#0STADM,XCLCBCCC2DI2LDA#1STADM/},XC2LDAYM,X;GET Y POS.CMP#52;TOO FAR UP?BNEC3;OK.LDADM,X;REVERSE!BNEDI3LDA#1STADM,XCLCBCCC3DI30}LDA#2STADM,XC3LDAYM,X;GET Y POS.CMP#213;TOO FAR DOWN?BNEC4;OK.LDADM,X;REVERSE!CMP#1BNEDY2LDA#$01}0STADM,XCLCBCCC4DY2LDA#3STADM,XC4INX;NEXT MISSILECPX#6;ALL DONE?BNEC0;NO, DO OTHERS!; Plot missil2}es on playfieldLDAXM;SET ALL MISSILES...STAHPOSP1;HORIZONTAL...LDAXM+1;POSITIONS!STAHPOSP2LDAXM+2STAHPO3}SP3LDAXM+3STAHPOSM1LDAXM+4STAHPOSM2LDAXM+5STAHPOSM3LDA#$00;PLOT 1ST MISSILELDYYM;IN PLAYER 1STA(4}BASE2),YLDA#$10INYSTA(BASE2),YINYSTA(BASE2),YLDA#$00INYSTA(BASE2),YLDA#$00;PLOT 2ND MISSILELDYYM5}+1;IN PLAYER 2STA(BASE3),YLDA#$10INYSTA(BASE3),YINYSTA(BASE3),YLDA#$00INYSTA(BASE3),YLDA#$00;PL6}OT 3RD MISSILELDYYM+2;IN PLAYER 3STA(BASE4),YLDA#$10INYSTA(BASE4),YINYSTA(BASE4),YLDA#$00INYSTA(7}BASE4),YLDA#$EF;PLOT 4TH MISSILELDYYM+3;IN MISSILE 1AND(MBASE),YSTA(MBASE),YLDA#$10INYORA(MBASE),YSTA8}(MBASE),YLDA#$10INYORA(MBASE),YSTA(MBASE),YLDA#$EF;PLOT 5TH MISILEINY;IN MISSILE 2AND(MBASE),YSTA(M9}BASE),YLDA#$FBLDYYM+4AND(MBASE),YSTA(MBASE),YLDA#$04INYORA(MBASE),YSTA(MBASE),YLDA#$04INYORA(M:}BASE),YSTA(MBASE),YLDA#$FB;PLOT 6TH MISSILEINY;IN MISSILE 3AND(MBASE),YSTA(MBASE),YLDA#$BFLDYYM+5AND;}(MBASE),YSTA(MBASE),YLDA#$40INYORA(MBASE),YSTA(MBASE),YLDA#$40INYORA(MBASE),YSTA(MBASE),YLDA#$BF<}INYAND(MBASE),YSTA(MBASE),Y; Create soundINCT1LDAT1CMP#$10BNESO1LDA#$00STAT1DECT2LDAT2BN=}ESO2LDA#3STAT2SO2LDA#$C8;SET SOUND CONTROLSTAAUDC2LDAT2;GET SOUND NUMBERCMP#3;SOUND 3?BNES2;NO!LD>}A#120;SET 3RD...STAAUDF2;SOUND FREQUENCYCLCBCCSO1;GO SHOW TIMES2LDAT2CMP#2;SOUND 2?BNES3;NO!LDA#100?};SET 2ND...STAAUDF2;SOUND FREQUENCYCLCBCCSO1;AND SHOW TIMES3LDA#85;SET 1STSTAAUDF2;SOUND FREQUENCYSO1LDA@}TI1;SHOW DIGIT 1...STASCREEN+9;OF SECONDSLDATI2;SHOW DIGIT 2...STASCREEN+10;OF SECONDSLDATI4;SHOW MINUTES!A}STASCREEN+7; Check for extra lifeLDATI4;GET MINUTESCMP#19;3 MINUTES?BNEOELC;NO!LDAELF;DONE EXTRA LIFE YEB}T?BNEOELC;YES, NO MORE!INCLIFE;ANOTHER LIFEINCELF;SET EXTRA LIFE FLAGLDA#$A4;SET UP FOR...STAAUDC1;EXTRA C}LIFE SOUNDLDA#$01STASF1OELCLDATI4;GET MINUTESCMP#21;5 MINUTES?BNEOEL;NO!LDAELF;GOT 2ND EXTRA?CMP#1D}BNEOEL;NO MORE!INCLIFE;ANOTHER LIFE!INCELF;INC EXTRA LIFE FLAGLDA#$A4;SET UP FOR...STAAUDC1;EXTRA LIFE SOUNE}DLDA#$01STASF1; Check for ending sequenceOELLDAHIT;ASTRO HIT DEBRIS?BEQNEND;NO, HE'S OK.JMPEND;UH-OH!NEF}NDLDA#80;THIS SECTIONLSRTI1;CREATES A TIMEPHP;DELAY USINGSEC;THE TIME VARIABLESSBCTI1;TI1 AND TI4PLPROG}LTI1LDX#$00SMORSBCTI4INXCPX#3BNESMORTAXTD1LDY#$00;THIS IS ATD2INY;TIME DELAYBNETD2;ROUTINE!DEXH}BNETD1; Play extra life soundLDASF1;GET BONUS SOUND FLAGCMP#1;FIRST FREQ?BNESC2;NO!LDA#50;SET 1ST BONUSI} FREQ.STAAUDF1INCSTIME;INC SOUND TIMERLDASTIMECMP#$25;END OF SOUND?BNESC2;NOT YET!INCSF1;NEXT FREQLDAJ}#$00;NO MORE SOUND!STASTIMESC2LDASF1;GET BONUS SOUND FLAGCMP#2;SECOND FREQ?BNESC3;NO!LDA#40;SET FREQ.SK}TAAUDF1INCSTIME;INCREMENT TIMERLDASTIMECMP#$25;SOUND DONE?BNESC3;NO!INCSF1;NEXT FREQLDA#$00;ALL DONE!L}STASTIMESC3LDASF1;GET BONUS SOUND FLAGCMP#3;3RD FREQ?BNESC4;NO!LDA#32;SET FREQ.STAAUDF1INCSTIME;INCM} SOUND TIMERLDASTIMECMP#$25;SOUND DONE?BNESC4;NO!INCSF1;SET FOR ENDLDA#$00;ALL DONE!STASTIMESC4LDASFN}1;GET BONUS SOUND FLAGCMP#4;END OF SOUND?BNESC5;NO!LDA#00;SHUT OFF SOUND!STAAUDF1STAAUDC1LDA#$00;ALL DO}ONE!STASTIMESC5LDA#138;UPDATE LIVES...LDX#$00;DISPLAYDMORESTASCREEN+13,X;ALL LIVESINXCPXLIFEBNEDMOREP}JMPBACKENDDECLIFE;1 LESS LIFELDA#$A8;INIT DEATH SOUNDSTAAUDC1STAAUDC2LDA#50;INIT FREQ.SASTAAUDF1PHAQ}CLCADC#100;INCREMENT SOUNDSTAAUDF2STAPCOLR0;FLASH ASTRONAUTPLALDY#$00;TIME DELAYDLY2LDX#$00DLY1INXBNER}DLY1INYCPY#25BNEDLY2CLCADC#$01CMP#100;END OF DEATH?BNESA;NO, LOOP BACKLDA#$00;SHUT OFF SOUNDSTAAS}UDF1STAAUDC1STAAUDF2STAAUDC2LDA#$46;RESET...STAPCOLR0;ASTRONAUT COLORLDA#$00;REMOVE...LDYLIFE;LIFE IT}NDICATOR...STASCREEN+13,Y;FROM SCREENLDALIFE;ANY MORE LIVES?BEQDEATH;NO! END OF GAME!JMPSTART;ANOTHER LIFE.DU}EATHLDA#00;ZERO LIVESSTALIFEAGAINLDASTRIG0;STICK TRIGGER PRESSED?BEQRESTRT;YES!LDACONSOL;GET CONSOLE KEYCV}MP#6;START PRESSED?BNEAGAIN;NO!RESTRTLDA#$00;RESET...STAATTRAC;ATTRACT MODEJMPSTART2;RESTART GAME.; VertiW}cal blank interruptVBILDAM1PL;GET...ORAM2PL;ALL...ORAM3PL;COLLISION...ORAP1PL;REGISTERS...ORAP2PL;AND CHX}ECK...ORAP3PL;FOR...AND#1;ASTRONAUT...STAHIT;COLLISION!INCTI3;INCREMENT 1/60 SEC.LDATI3;TIMERCMP#60;AY}NOTHER SECOND?BNETOVR;NO!LDA#$00;RESET 60THS OF SECSTATI3INCTI2;ANOTHER SECONDLDATI2CMP#26;10 SECS?BNZ}ETOVR;NO!LDA#16;RESET 2ND SECOND...STATI2;DIGIT TO 0INCTI1;INCREMENT 1ST...LDATI1;SECOND DIGITCMP#22;GO[}T A MINUTE?BNETOVR;NO!INCTI4;INCREMENT MINUTESLDA#16;RESET 1ST SECOND...STATI1;DIGIT TO 0TOVRJMPXITVBV;EX\}IT VERT BLANK!; Set up display listDLISTDB112,112,112,71DWSCREENDB9,9,9,9,9,9,9,9,9,9DB9,9,9,9,9,9,9,9,9,9DB]}9,9,9,9,9,9,9,9,9,9DB9,9,9,9,9,9,9,9,9,9DB9,9,9,9DB65DWDLIST; Data for astronaut imageANAUTDB$00,$7C,$54,$^}6C,$7C,$44,$7C,$10,$10,$FE,$BA,$BADB$BA,$38,$38,$28,$28,$EE,$00; Set up screen memoryMIDBYTDB128,0,0,0,0,0,0,0,0,1S_}CREENDB0,0,116,105,109,101,0,0,26,0,0,0,0,0,0,0,0,0,0,0SCRNADS10SCRNBDS420SCRNCDS10ENDSSTAR,0,0,0,0,0,0,0,1SkN@  )?HI Y0`HIJH) * J j * hJJJ )HJ h i     a} YS S0 i`΢ϣ߳H J3xj2hb} 1 |9 ӭ45(420 * (0241өX.`  R *i)Lvw  ~*Pc}E 5 LN(G E  r s k rsrL ( E LO(0d( L iE0O +)$IC  H S8 d}q p h   j 8no CDLQ CFl M  LO Ri)Llk2'")*Fe}$F$F$F$F$ 5 )ШF/Șl]kpqС,LQ/A! Ti)Zlk@ ܬ/i)(")")kf}$F$F$F 5$/L /lF@jj(LNkle$$%8(k()` R 8 ELO Ri)^>jf | NrC s g} ) vw5g   enfo Glvw LQ@iLm>j FL ~Jjjjii p qEhh}jlrs`LQ:$ȱ$@+[_#{ 8  Խut! ai 8   E I   ] Ci} H h    ˰ 8  N   Lm E  ,  [ `LQ ,/ 8 ~/  Ơ? ѩj}/  [ /Lj0?MoLn FjMqLp NklLOLQnLoMlNLO R"(+k}ըHH`Q R!!  % !   / .   FȑF! /GF \H"+0+* l}! F tLQnm: J~nTF1F  *n+)5! n (, n)1JJJn(n*om} I ,0  ci a oF? @ , 8,0 ʩ0H Eh   in}  D ]DmmFLQvtu`*&!*@h ] 0 ^0` c 0l$$%o}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 hp}`hhh&JJ ](ll  LQ0  /qnoHH 9 9 H H  I9  9 q} Nd EH  Q8 o n  FnoL HII/ Ih8`h`Lnon`no`u F r}E VEhLO/luF l0BF/lɜɛ׽hE N  b VFL FREE SECTORS Cs} H) *Fh ):FȽ F FC IH' 0 d  i:Fȩ/F.l`CD/08HDICt}IHȰ/F`ȱ$>.+.i ȱ$:刄H !A \ Hȱ$*?ȝ 2. ? [_{ ,0u}-:) 0$:>WI  IТ,LQH  0hLd ~ t u`C ?( 0(C.` E v} R =! .ti S0N EE D XC )0')AY  )ע ? 0E088FG \ow}n  (HhLcL3 iJ i Lqp 0=rspnqopqlk`jZj0  j FL`Hx}FhȑFȽlFi0 h FFLFpvqwgneofLF pq7  G0i 0 FJJh1FqȱFpȱFk`B!y}08`hEE D 8. =D}tui( TʩL`b!)    cȌaȌd b`aabz}H8 hdaHcd8 cH hHH  \h hc` =Hh I8ih( t  ( t(!` L\{}CJfCJfCJfCDfC` a  HII  INdh  `h  `n)8jHniPoijIjFIjFIjh` a|} I 38  8H0 I  ' H LQ8j Y  8j NdY  &I &I &IHeH.p}}Iiq  `!.莿 2Jjj }.m Ȉ!m FG` ɩLQ z ~} e Hi04 \ Ȍ  8 i h !`I0 `C Y8.`DOS SYS} I  ` ~ݩ.C/`ba.m۩mѤC9 `C L] H  ,- '0 l }, BLVDE`D1:AUTORUN.SYS8hhJ ȱHȱIȱBȱDȱEeeHHLV)  }1*  ,,p-  0 I &  '0   Lw)l, 0  I&LD1:MEM.SAV}E:D1:DUP.SYSѠ(gbH#6ZH % ` 28 . HA JT5H*V} D  C D     )16CS S)  C)D1 p p }0 C9DI pCDL~CiCDiD` DD˙` d J)L !}D L(( LL()  L| L( S LH 0p n  } CY?  q  L L  ` )} `A! d߰")-݆ "  $G@LLL&0") $G%}H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0})8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH)}  hyhyB q L> Lm JJ  Ln*` dB%'}8  H H` 1 { LL   !L     Hh SY?  q  1L}  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF } G) *Gȩ GȽG GȌd q q G`  8   0G  `D}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y}`piH n0)բY? 08`0 }  0$L GGȽG L `8L`L}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR}1LJ舩9GIH`LJJ`HGHh l`} S gL   8 rii `дCDCG W  }C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}}CRE |||DDOS DOSDOS SYS }}}}\}"}CDOS SYS} 0`BDELV !B }`LVUQ   ]   TU J ]L!T  #      TU } L ? .  t`GBJ V~DEHI B V0dV}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh}DEL8HI   0 HI,0 0  9 .G VLO},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI} V0 0`B;DELV䌚 !B y`@ʆ v s? F0Ξ05: [ BDEHI} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO }STILL RUN DOS B;DE J V (` 9 V⪍ ઍ  -}LLu DEHILV 9 .l 9 .l  `` s$B VBH}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVL}1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2e}1i1232435ޥ<<8}01!ASSEMBLYPAGEDLISTHIGINITVBLANKLOPAGES} d **************************n * SMOOTH SCROLL DEMO *x * BY KYLE PEACOCK * } * A.N.A.L.O.G. COMPUTING * * ISSUE 16 * * ALL RIGHTS UNRESERVED! * **************************} }!!- DIMENSION INIT$ & VBLANK$!!- EXACTLY AS THEY ARE HERE.;A,;A,}- DIMENSIONS OF PAGES$ &- DLIST$ WILL DEPEND ON- APPLICATION";A,;@x,, PHASE } COMPLETE.6@- INSTALL DATA.J!!- LOOP VARIABLE SHOULD BE 1T""- TO # OF PAGE BYTES DIVIDED^- BY TWO}.hr-@@V"|1167$@&@<$@&@,.>:,%!67$@<$@,.>:,% }(PHASE COMPLETE.- INSTALL DATA!!- LOOP VARIABLE SHOULD BE 1- TO # OF DLIST BYTES}-@@v"67<,.>:, 6-P:C:,'AV,6-C:,&$AV67<,.>:,!!67%@<%}@,.>:,(PHASE COMPLETE.""- INSTALL VBLANK INITIALIZER&0-@A":67<,.>}:, D(PHASE COMPLETE.NX- INSTALL VBLANK ROUTINEbl-@A"v67<,.>:, }- ALL DONE...(PHASE COMPLETE.- POKE A INTO MEM. LOC. - TO HALT .}!!- IF ANY PARAMETERS NEED TO""- BE CHANGED ONCE THINGS GET - GOING, Š, THEN!!- PERFORM THE CALL }WITH- THE NEW PARAMETERS.- FINALLY, Š A@~~6-?:C:,- RAM PAGE USAGEHR0,0,1,0,2,0,3,0\250,0,251,0,252,0,253,0f254,0,255,0p3,0,1,0,0,0,253,0z}250,0,5,0,4,0,250,05,0,2,0,0,0,4,0253,0,241,0,222,0,3,0247,0,212,0,2,0,1,03,0,5,0,252,0,253,02}55,0,254,0,253,0,252,0251,0,250,0,249,0,248,01,0,3,0,2,0,5,04,0,248,0,252,0,253,00,0,3,0,6,0,4,0}254,0,255,0- DISPLAY LIST112,112,112,118,0,0118,0,0,118,0,0,118,0,0118,0,0,118,0,0,118,0},0$118,0,0,118,0,0,118,0,0.118,0,0,118,0,0,118,0,08118,0,0,118,0,0,118,0,0B118,0,0,118,0,0,118,0,0L1}18,0,0,118,0,0,118,0,0V118,0,0,86,0,0,65@J- VBLANK INITIALIZERT^165,16,41,127,133,16,141h14,210},216,104,104,141,28r6,104,141,27,6,104,141|1,6,104,141,0,6,104104,141,8,6,104,104,1412,6,141,18,6,104,1}04141,4,6,104,104,141,36,141,19,6,104,104,1415,6,104,104,141,6,6104,104,141,7,6,104,104141,10,6},104,104,141,116,104,104,141,9,6,104104,141,12,6,104,104,14113,6,104,133,204,104,133203,169,1,141,16,}6,14117,6,165,205,72,165,20672,173,0,6,133,205,173 1,6,133,206,160,0,162 0,142,15,6,142,15,6 177,2}05,141,26,6,41,15& 240,33,173,26,6,41,640 240,26,200,200,173,26,6: 41,15,201,1,240,18,173D 26,6,41,48,240,8,1}52N 56,233,2,157,29,6,232X 200,208,211,142,20,6,104b 133,206,104,133,205,169,7l 174,28,6,172,27,6,32v 92,}228,96 * 199 BYTES(#2#- VERTICAL BLANK ROUTINE<#F#173,255,6,240,3,76,98P#228,216,173,0,6,141,48Z#}2,173,1,6,141,49,2d#206,16,6,208,124,173,10n#6,141,16,6,240,116,174x#9,6,189,120,2,172,12#6,208,12,41,12,20}1,8#240,103,201,4,240,12,208#93,41,12,201,4,240,91#201,8,208,123,238,14,6#173,14,6,205,6,6,240#112,1}44,110,173,18,6,205#2,6,208,7,206,14,6#240,97,208,95,206,18,6#169,255,72,48,7,169,0#141,14,6,240,80,141,2}2#6,104,141,23,6,174,8#6,202,160,0,177,203,24#109,22,6,145,203,200,177$203,109,23,6,145,203,200$202,}16,236,173,22,6,48$211,16,34,240,38,208,36"$206,14,6,16,31,173,18,$6,205,4,6,208,7,2386$14,6,240,18,208,16,2}38@$18,6,169,0,72,169,1J$16,182,173,6,6,141,14T$6,206,17,6,208,110,173^$11,6,141,17,6,240,102h$174,9,6,18}9,120,2,172r$13,6,208,12,41,3,201|$2,240,49,201,1,240,12$208,79,41,3,201,1,240$37,201,2,208,69,206,15$}6,16,64,173,19,6,205$3,6,208,7,238,15,6$240,51,208,49,206,19,6$173,7,6,141,15,6,240$38,208,36,238,15,6,17}3$15,6,205,7,6,240,25$144,23,173,19,6,205,5$6,208,7,206,15,6,240$10,208,8,238,19,6,169$0,141,15,6,17}3,14,6$141,4,212,173,15,6,141%5,212,173,20,6,240,83%141,21,6,165,205,72,165%206,72,162,0,142,24,6&%17}3,19,6,10,141,25,60%173,48,2,133,205,173,49:%2,133,206,172,25,6,177D%203,72,174,24,6,189,29N%6,168,200,104,14}5,205,238X%25,6,172,25,6,177,203b%72,189,29,6,168,200,200l%104,145,205,238,24,6,238v%25,6,206,21,6,208,210%} 104,133,206,104,133,205,76% 98,228%* 408 BYTES D:PART4.BAS0#96,208,94,206,18,6,169#255,72,48,7,}169,0,141#14,6,240,79,141,22,6#104,141,23,6,174,8,6#202,160,0,177,203,24,109#22,6,145,203,200,177,203$}109,23,6,145,203,200,202$16,236,173,22,6,48,211$,34,240,37,208,35,206"$14,6,16,30,173,18,6,$205,4,6,208,7},238,146$6,240,17,208,15,238,18@$6,169,0,72,169,1,16J$182,169,7,141,14,6,206T$17,6,208,110,173,11,6^$141,}17,6,240,102,174,9h$6,189,120,2,172,13,6r$208,12,41,3,201,2,240|$49,201,1,240,12,208,79$41,3,201,1,240,37,20}1$2,208,69,206,15,6,16$64,173,19,6,205,3,6$208,7,238,15,6,240,51$208,49,206,19,6,173,7$6,141,15,6,24}0,38,208$36,238,15,6,173,15,6$205,7,6,240,25,144,23$173,19,6,205,5,6,208$7,206,15,6,240,10,208$8,238},19,6,169,0,141$15,6,173,14,6,141,4$212,173,15,6,141,5,212%173,20,6,240,83,141,21%6,165,205,72,165,206,72}%162,0,142,24,6,173,19&%6,10,141,25,6,173,480%2,133,205,173,49,2,133:%206,172,25,6,177,203,72D%174,24,6,}189,29,6,168N%200,104,145,205,238,25,6X%172,25,6,177,203,72,189b%29,6,168,200,200,104,145l%205,238,24,6,238,2}5,6v%206,21,6,208,210,104,133%206,104,133,205,76,98,228%* 406 BYTES D:VBLANK.LST4104,133,203,}169,1,141,166,141,17,6,165,205,72165,206,72,173,0,6,133205,173,1,6,133,206,1600,162,0,142,15,6,142}15,6,177,205,141,26,641,15,240,33,173,26,6 41,64,240,26,200,200,173 26,,15,201,1,240 18,173,26,6,41,4}8,240& 8,152,56,233,2,157,290 6,232,200,208,211,142,20: 6,104,133,206,104,133,205D 173,0,6,141,48,2,173N }1,6,141,49,2,169,7X 174,28,6,172,27,6,32b 92,228,96l v - VERTICAL BLANK INTERRUPT (#216,206,16,6,208},123,1732#10,6,141,16,6,240,115<#174,9,6,189,120,2,172F#12,6,208,12,41,12,201P#8,240,102,201,4,240,12Z#20}8,92,41,12,201,4,240d#90,201,8,208,121,238,14n#6,173,14,6,201,7,240x#111,144,109,173,18,6,205#2,6,208,7,206,}14,6#240,96,208,94,206,18,6#169,255,72,48,7,169,0#141,14,6,240,79,141,22#6,104,141,23,6,174,8#6,202,}160,0,177,203,24#109,22,6,145,203,200,177#203,109,23,6,145,203,200#202,16,236,173,22,6,48#211,16,34,240,3}7,208,35#206,14,6,16,30,173,18#6,205,4,6,208,7,238#14,6,240,17,208,15,238$18,6,169,0,72,169,1$16,182},169,7,141,14,6$206,17,6,208,110,173,11"$6,141,17,6,240,102,174,$9,6,189,120,2,172,136$6,208,12,41,3,201,2@}$240,49,201,1,240,12,208J$79,41,3,201,1,240,37T$201,2,208,69,206,15,6^$16,64,173,19,6,205,3h$6,208,7,238,1}5,6,240r$51,208,49,206,19,6,173|$7,6,141,15,6,240,38$208,36,238,15,6,173,15$6,205,7,6,240,25,144$23,17}3,19,6,205,5,6$208,7,206,15,6,240,10$208,8,238,19,6,169,0$141,15,6,173,14,6,141$4,212,173,15,6,141,5$}212,173,20,6,240,83,141$21,6,165,205,72,165,206$72,162,0,142,24,6,173$19,6,10,141,25,6,173$48,2,133,205,}173,49,2$133,206,172,25,6,177,203%72,174,24,6,189,29,6% 168,200,104,145,205,238,25%6,172,25,6,177,203,72&}%189,29,6,168,200,200,1040%145,205,238,24,6,238,25:%6,206,21,6,208,210,104D%133,206,104,133,205,76,98N% 228},29,6,168,200,200,1040%145,205,238,24,6,238,25:%6,206,21,6,208,210,104D%133,206,104,133,205,76,98N% 2280100 .OPT NO LIST0110 ;0120 ; **************0130 ; SYSTEM EQUATES0140 ; **************0150 ;0160 POKMSK = $10 ;P }OKEY INTERRUPT0170 SDLSTL = $0230 ;DLIST POINTER0180 STICK0 = $0278 ;JOYSTICK PORT0190 IRQEN = $D20E ;INTER. REQUEST0 }200 HSCROL = $D404 ;SCROLL REGISTER0210 VSCROL = $D405 ;SCROLL REGISTER0220 SETVBV = $E45C ;SET TIMERS0230 XITVBV = $E4 }62 ;EXIT DEF VBLANK0240 ;0250 ; **********************0260 ; MEMORY USAGE & EQUATES0270 ; **********************0280 ; }0290 LISTLO = $0600 ;DLIST LO-BYTE0300 LISTHI = $0601 ;DLIST HI-BYTE0310 MINX = $0602 ;LEFTMOST LIMIT0320 MINY = $06 }03 ;UPPER LIMIT0330 MAXX = $0604 ;RIGHTMOST LIMIT0340 MAXY = $0605 ;LOWER LIMIT0350 HMAX = $0606 ;LARGEST HSCRO }L0360 VMAX = $0607 ;LARGEST VSCROL0370 ALINES = $0608 ;# OF D-LINES0380 STICK = $0609 ;JOYSTICK #0390 HSPEED = $060 }A ;HOR. SPEED0400 VSPEED = $060B ;VER. SPEED0410 HINVERT = $060C ;INVERSION FLAG0420 VINVERT = $060D ;INVERSION FLAG043 }0 PAGES = $CB ;SCREEN PAGES0440 ZPAGE = $CD ;ZERO PAGE INDEX0450 ;0460 ; **************************0470 ; MISCELL }ANEOUS MEMORY USAGE0480 ; **************************0490 ;0500 HBIT = $060E ;'HSCROL' COPY0510 VBIT = $060F ;'VSCRO }L' COPY0520 HTIME = $0610 ;'HSPEED' COPY0530 VTIME = $0611 ;'VSPEED' COPY0540 HPOINT = $0612 ;SHIFT COUNTER0550 VPOI }NT = $0613 ;SHIFT COUNTER0560 DLINES = $0614 ;LMS OPCODES CNT0570 COUNT = $0615 ;'DLINES' COPY0580 TEMP = $0616 ;TE }MP STORAGE0590 TEMP1 = $0617 ;TEMP STORAGE0600 XHOLD1 = $0618 ;TEMP STORAGE0610 XHOLD2 = $0619 ;TEMP STORAGE0620 OPCO }DE = $061A ;DLIST OPCODE0630 VBLANK = $061B ;VBLANK VECTOR0640 OFFSETS = $061D ;OFFSETS TO LMS0650 STOPALL = $06FF ;HOLD } EVERYTHING;DLIST OPCODE0630 VBLANK = $061B ;VBLANK VECTOR0640 OFFSETS = $061D ;OFFSETS TO LMS0650 STOPALL = $06FF ;HOLD 1000 .INCLUDE #D:VAR.ASM1010 ;1020 ;**********************1030 ;INITIALIZATION ROUTINE1040 ;**********************10}50 ;1060 *= $40001070 LDA POKMSK ;GET IRQ. INT.1080 AND #$7F ;NO BREAK KEY1090 STA POKMSK ;THE BREA}K KEY1100 STA IRQEN ;NO LONGER WORKS1110 CLD ;CLEAR DECIMAL1120 PLA ;# OF ARGUEMENTS1130 } PLA ;VBLANK HI/BYTE1140 STA VBLANK+11150 PLA ;VBLANK LO/BYTE1160 STA VBLANK1170 PLA } ;DLIST HI/BYTE1180 STA LISTHI1190 PLA ;DLIST LO/BYTE1200 STA LISTLO1210 PLA ;DISCARD}1220 PLA ;GET 'LINES'1230 STA ALINES1240 PLA ;DISCARD1250 PLA ;GET 'MINX'1260 } STA MINX1270 STA HPOINT ;RESET TO START1280 PLA ;DISCARD1290 PLA ;GET 'MAXX'1300 STA M}AXX1310 PLA ;DISCARD1320 PLA ;GET 'MINY'1330 STA MINY1340 STA VPOINT ;RESET TO START135}0 PLA ;DISCARD1360 PLA ;GET 'MAXY'1370 STA MAXY1380 PLA ;DISCARD1390 PLA } ;GET 'HMAX'1400 STA HMAX1410 PLA ;DISCARD1420 PLA ;GET 'VMAX'1430 STA VMAX1440 P}LA ;DISCARD1450 PLA ;GET 'HSPEED'1460 STA HSPEED1470 PLA ;DISCARD1480 PLA } ;GET 'VSPEED'1490 STA VSPEED1500 PLA ;DISCARD1510 PLA ;GET 'STICK'1520 STA STICK1530  } PLA ;DISCARD1540 PLA ;GET 'HINVERT'1550 STA HINVERT1560 PLA ;DISCARD1570 PLA  } ;GET 'VINVERT'1580 STA VINVERT1590 PLA ;PAGE USAGE HI1600 STA PAGES+1 ;STORE IT1610 PLA  } ;PAGE USAGE LO1620 STA PAGES ;STORE IT1630 LDA #$01 ;INITIALIZE RAM1640 STA HTIME ;COPY OF SPEED1 }650 STA VTIME ;TIMERS.1660 ;1670 ;*******************************1680 ;EXAMINE DLIST, NOTE LMS OPCODES1690 ;******* }************************1700 ;1710 LDA ZPAGE ;SAVE WHATEVER1720 PHA ;IS IN MEM. LOC.1730 LDA ZPAGE+}1 ;SAVE WHATEVER1740 PHA ;IS IN MEM. LOC.1750 LDA LISTLO ;GET DLIST/LO &1760 STA ZPAGE ;PUT IN WORK}AREA1770 LDA LISTHI ;GET DLIST/HI &1780 STA ZPAGE+1 ;PUT IN WORKAREA1790 LDY #$00 ;SET UP COUNTER1800 } LDX #$00 ;SET UP COUNTER1810 STX VBIT ;SET UP SCROLL1820 STX VBIT ;BITS TO ZERO1830 DLOOK LDA (ZPAGE),Y };GET DISPLAY1840 STA OPCODE ;LIST OPCODE1850 AND #$0F ;IS IT A BLANK1860 BEQ NEXT ;LINE OPCODE?1870 } LDA OPCODE ;IS IT AN LMS1880 AND #$40 ;OPCODE?1890 BEQ NEXT1900 INY ;IF SO, SKIP1910 INY } ;LMS OPERANDS1920 LDA OPCODE1930 AND #$0F ;IS IT A JVB1940 CMP #$01 ;OPCODE?1950 BEQ DONE };IF SO, STOP.1960 LDA OPCODE ;ARE SCROLL BITS1970 AND #$30 ;OF OPCODE SET?1980 BEQ NEXT1990 TYA } ;THIS IS AN LMS2000 SEC ;OPCODE W/SCROLL2010 SBC #$02 ;BITS SET. SAVE2020 STA OFFSETS,X ;THE OFF}SET.2030 INX 2040 NEXT INY ;MOVE TO NEXT2050 BNE DLOOK ;DLIST OPCODE.2060 DONE STX DLINES ;SAVE # OF LIN}ES2070 PLA ;RESTORE MEM.2080 STA ZPAGE+1 ;LOCATION.2090 PLA ;RESTORE MEM.2100 STA ZPAGE } ;LOCATION.2110 LDA #$07 ;TELL SYSTEM TO2120 LDX VBLANK+1 ;SET UP DEF.2130 LDY VBLANK ;VERTICAL BLANK2140} JSR SETVBV ;ROUTINE.2150 RTS ;ALL DONE. BYE!LANK+1 ;SET UP DEF.2130 LDY VBLANK ;VERTICAL BLANK2140@7000 .INCLUDE #D:VAR.ASM7010 ;7020 ;**************************7030 ;TIME TO HORIZONTAL SCROLL?7040 ;*****************}*********7050 ;7060 *= $50007070 LDA STOPALL ;IS IT OKAY TO7080 BEQ PLUNGE ;EXECUTE?7090 JMP XITVBV ;}NO! BYE!7100 PLUNGE CLD ;YES, CLEAR DEC.7110 LDA LISTLO ;TELL ANTIC7120 STA SDLSTL ;WHERE YOUR NEW7130 } LDA LISTHI ;DISPLAY LIST IS7140 STA SDLSTL+17150 DEC HTIME ;DECREMENT TIMER7160 BNE ENDIT ;IF <> 0, STOP}!7170 LDA HSPEED ;RESET TIMER7180 STA HTIME7190 BEQ ENDIT ;IF = 0, STOP!7200 ;7210 ; NOW READ CORRECT JO}YSTICK7220 ;7230 LDX STICK ;GET POSITION OF7240 LDA STICK0,X ;RIGHT JOYSTICK7250 LDY HINVERT ;SHOULD WE IN- }7260 BNE HOPP ;VERT HOR. MOVE7270 ;7280 ;SCROLL DIRECTION ISN'T INVERTED7290 ;7300 AND #$0C ;SCAN SELECT7!}310 CMP #$08 ;JOYSTICK BITS7320 BEQ HLEFT ;MOVE LEFT7330 CMP #$047340 BEQ HRIGHT ;MOVE RIGHT7350 "} BNE ENDIT7360 ;7370 ;SCROLL DIRECTION IS INVERTED7380 ;7390 HOPP AND #$0C ;SCAN SELECT7400 CMP #$04 ;JOYSTICK#} BITS7410 BEQ HLEFT ;MOVE LEFT7420 CMP #$087430 BNE ENDH ;MOVE RIGHT7440 ;7450 ; SCROLL RIGHT7460 ;7$}470 HRIGHT INC HBIT ;INCREMENT RAM7480 LDA HBIT ;'HSCROL' COPY7490 CMP HMAX ;IS IT ABOVE7500 BEQ ENDH %} ;VALID SCROLL7510 BCC ENDH ;LIMIT?7520 LDA HPOINT ;YES! ARE WE AT7530 CMP MINX ;LEFTMOST BOUND?7540 &} BNE HOR5 ;NO, CONTINUE7550 DEC HBIT ;YES! HALT7560 BEQ ENDH ;SCROLL & QUIT7570 BNE ENDH7580 HOR5 '}DEC HPOINT ;CONTINUE.7590 LDA #$FF ;PERFORM BYTE7600 PHA ;SHIFTING W/HFIX7610 BMI HFIX ;ROUTINE(}7620 HOR55 LDA #$00 ;RESET 'HSCROL'7630 STA HBIT ;RAM COPY.7640 BEQ ENDH ;ALL DONE.7650 ;7660 ;INC/DEC LMS)} LO/BYTE OPERANDS7670 ;7680 HFIX STA TEMP ;GET BYTES TO7690 PLA ;INC/DEC LO-BYTE7700 STA TEMP1 ;OF LM*}S OPERANDS7710 LDX ALINES ;GET # OF LINES7720 DEX ;MINUS ONE7730 LDY #$00 ;SET INDEX TO 07740 HFI+}X5 LDA (PAGES),Y ;GET OPERAND7750 CLC 7760 ADC TEMP ;INC/DEC IT7770 STA (PAGES),Y ;PUT IT BACK7780 INY,} ;CHECK FOR WRAP7790 LDA (PAGES),Y ;AROUND OF LO7800 ADC TEMP1 ;BYTE INTO HI7810 STA (PAGES),Y ;BYTE-}. FIXITUP7820 INY ;ADJUST POINTER7830 DEX ;DID WE DO ALL?7840 BPL HFIX5 ;NO! CONTINUE7850 .} LDA TEMP ;YES! DECIDE7860 BMI HOR55 ;WHO CALLED THIS7870 BPL HOR66 ;ROUTINE. RETURN7880 ;7890 ;INTERMED/}IATE BRANCH7900 ;7910 ENDIT BEQ ENDH ;NO MATTER WHAT7920 BNE ENDH ;BRANCH TO END.7930 ;7940 ; SCROLL LEFT7950 ;0}7960 HLEFT DEC HBIT ;DEC HSCROL COPY7970 BPL ENDH ;OUT OF RANGE?7980 LDA HPOINT ;YES! ARE WE AT7990 CMP 1}MAXX ;RIGHT BOUND?8000 BNE HOR6 ;NO! CONTINUE8010 INC HBIT ;YES! HALT8020 BEQ ENDH ;SCROLL & QUIT2}8030 BNE ENDH8040 HOR6 INC HPOINT ;NO! PERFORM8050 LDA #$00 ;BYTE SHIFTING8060 PHA ;W/HFIX ROUTINE3}8070 LDA #$018080 BPL HFIX8090 HOR66 LDA HMAX ;RESET 'HSCROL'8100 STA HBIT ;RAM COPY8110 ;8120 ; TIME TO4} VERTICAL SCROLL?8130 ;8140 ENDH DEC VTIME ;DEC. TIMER8150 BNE ENDV ;IF <> 0, QUIT8160 LDA VSPEED ;RESTORE T5}IMER8170 STA VTIME ;FOR NEXT TIME8180 BEQ ENDV ;IF = 0, QUIT8190 ;8200 ; READ CORRECT JOYSTICK8210 ;8220 6} LDX STICK ;GET JOYSTICK #8230 LDA STICK0,X ;GET READING8240 LDY VINVERT ;IS VER. SCROLL8250 BNE VOPP ;7}INVERTED?8260 ;8270 ;VERTICAL SCROLL ISN'T INVERTED8280 ;8290 AND #$03 ;SCAN SELECT8300 CMP #$02 ;BITS8318}0 BEQ VUP ;SCROLL UP8320 CMP #$018330 BEQ VDOWN ;SCROLL DOWN8340 BNE ENDV8350 ;8360 ;VERTICAL SCRO9}LL IS INVERTED8370 ;8380 VOPP AND #$03 ;SCAN SELECT8390 CMP #$01 ;BITS8400 BEQ VUP ;SCROLL UP8410 C:}MP #$02 ;SCROLL DOWN8420 BNE ENDV ;DO NADA!8430 ;8440 ;SCROLL DOWN8450 ;8460 VDOWN DEC VBIT ;DEC VSCROL COPY;}8470 BPL ENDV ;IN VALID RANGE?8480 LDA VPOINT ;NO! ARE WE AT8490 CMP MINY ;UPPER BOUND?8500 BNE VER<}5 ;NO! CONTINUE8510 INC VBIT ;YES! STOP8520 BEQ ENDV ;SCROLL & QUIT8530 BNE ENDV8540 VER5 DEC VPOINT=} ;ADJUST VERTICAL8550 LDA VMAX ;RESET RAM COPY8560 STA VBIT ;OF 'VSCROL'8570 BEQ ENDV ;ALL DONE!8580>} BNE ENDV8590 ;8600 ;SCROLL UP8610 ;8620 VUP INC VBIT ;INC RAM COPY8630 LDA VBIT ;OF 'VSCROL'8640 CMP?} VMAX ;IS IT IN VALID8650 BEQ ENDV ;RANGE?8660 BCC ENDV8670 LDA VPOINT ;NO! ARE WE AT8680 CMP MAXY@} ;LOWER BOUND?8690 BNE VER6 ;NO! CONTINUE8700 DEC VBIT ;YES! HALT8710 BEQ ENDV ;SCROLL & QUIT8720A} BNE ENDV8730 VER6 INC VPOINT ;ADJUST VERTICAL8740 LDA #$00 ;RESET RAM COPY8750 STA VBIT ;OF 'VSCROL'87B}60 ENDV LDA HBIT ;INSTALL COPY8770 STA HSCROL ;INTO 'HSCROL'8780 LDA VBIT ;INSTALL COPY8790 STA VSCROL C};INTO 'VSCROL'8800 ;8810 ;INSTALL PAGE DATA INTO DLIST8820 ;8830 FIX LDA DLINES ;GET # OF LMS8840 BEQ RTS ;OPCOD}DES8850 STA COUNT ;HOLD ON TO IT8860 LDA ZPAGE ;SAVE WHATEVER8870 PHA ;IS IN MEM. LOC.8880 LDE}A ZPAGE+1 ;SAVE WHATEVER8890 PHA ;IS IN MEM. LOC.8900 LDX #$00 ;SET INDEX TO 08910 STX XHOLD18920 F} LDA VPOINT ;VERTICAL POINT8930 ASL A ;MULTIPLY BY 28940 STA XHOLD2 ;HOLD ON TO IT8950 LDA SDLSTL G};GET LO/DLIST &8960 STA ZPAGE ;PUT IN WORKAREA8970 LDA SDLSTL+1 ;GET HI/DLIST &8980 STA ZPAGE+1 ;PUT IN WORKH}AREA8990 HSTUFF LDY XHOLD2 ;PAGE INDEX9000 LDA (PAGES),Y ;PAGE DATA9010 PHA ;SAVE IT9020 LDX XHOLD1 I};OFFSET INDEX9030 LDA OFFSETS,X ;OFFSET TO LMS9040 TAY ;HOLD IT9050 INY ;PLUS ONE9060 PLAJ} ;GET PAGE DATA9070 STA (ZPAGE),Y ;PUT IN DLIST9080 INC XHOLD2 ;INC PAGE INDEX9090 LDY XHOLD2 ;GET IK}T AGAIN9100 LDA (PAGES),Y ;PAGE DATA9110 PHA ;SAVE IT9120 LDA OFFSETS,X ;OFFSET TO LMS9130 TAY L} ;HOLD IT9140 INY ;PLUS ONE9150 INY ;PLUS TWO9160 PLA ;GET PAGE DATA9170 STAM} (ZPAGE),Y ;PUT IN DLIST9180 INC XHOLD1 ;INC OFFSET INDEX9190 INC XHOLD2 ;INC PAGE INDEX9200 DEC COUNT ;ARN}E WE DONE?9210 BNE HSTUFF ;NO! KEEP GOING.9220 PLA ;RESTORE MEMORY9230 STA ZPAGE+1 ;LOCATION9240 O} PLA ;RESTORE MEMORY9250 STA ZPAGE ;LOCATION9260 RTS JMP XITVBV ;ALL DONE. LATER!ZPAGE+1 ;LOCATION9240 c  *RABYT * REPEAT KEY BASIC LOADER* BY SAMMIE J. MCCAA, JR.(Q}-AVA2"  <'AUA'* PLA FOR BASICF#6-?:AU,#* INIT ROUTINEP(FAST R}REPEAT INSTALLEDZd160,22,162,1,169,6,32,92n228,169,0,133,2,169,1,133x3,169,3,133,9,96,173,432,201,1S}1,144,2,169,10,14143,2,76,95,228 D:REPEAT.BAS28,169,0,133,2,169,1,133x3,169,3,133,9,96,173,432,201,1;0100 ;;;;;;;;;;;;;;;;;;;;;;;;;;;0110 ; ;0120 ; REPEAT KEY ;0130 ; U} ;0140 ; BY SAMMIE J. MCCAA, JR. ;0150 ; ;0160 ; ANALOG COMPUTING #16 ;0170 ; V} ;0180 ;;;;;;;;;;;;;;;;;;;;;;;;;;;0190 ;0200 ; ** EQUATES **0210 ;0220 BOOT = $090230 CASINI = $020240 SRTW}IMR = $022B0250 SETVBV = $E45C0260 SYSVBV = $E45F0270 PAUSE = 100280 ORG = $01000290 ;0300 *= ORG0310 ;0320 INX}IT0330 LDY #WAIT&255 ; CHANGE IMMEDIATE0340 LDX #WAIT/256 ; VERTICAL BLANK0350 LDA #6 ; VECTOR0360 JY}SR SETVBV0370 LDA #ORG&255 ; TRICK COMPUTER0380 STA CASINI ; INTO THINKING0390 LDA #ORG/256 ; THERE HAS BEENZ}0400 STA CASINI+1 ; A CASSETTE BOOT0410 LDA #30420 STA BOOT0430 RTS 0440 ;0450 WAIT0460 LDA SRTIMR [} ; GET TIMER VALUE0470 CMP #PAUSE+1 ; IS IT > PAUSE?0480 BCC STORE0490 LDA #PAUSE ; MAKE IT = PAUSE0500 STOR\}E0510 STA SRTIMR ; SAVE NEW RESULT0520 JMP SYSVBV ; AND RETURN0530 ;0540 .END ; MAKE IT = PAUSE0500 STORa !AFDMAOEGINXXYYOFPPXYZPVISQQQLLNZOOOOOVVVDDDDUCCCSSQQQXYZVCVCVC!^}AAAXAYATQISAVIIXTYTZTXTYTZTFFXYXYPOPLLLRRTTBBXYXY!_} @ @@@@!`}@ !"#!a}$%&'()*+,-./012!b}3456789:;<=>?@AB!c}CDEFGHIJKLMNOPQR!d}STUVWXYd +n##(***************************x##(* 3-D IM!e}AGE PLOT SYSTEM *##(* BY TOM HUDSON *##(* ANALOG COMPUTING # 16 *##(***************************!f}nG;@,;@ ,;@,;@,;@,;@,V6.>:@',n67@,.>:@,?6-!g}6-A'6-36-A?6-B-((DMA OFF-0Y*0NA7((OUTPUT TO PLOTTER!!q}!B\SSTARS ASMBJ`DOS SYSBDSCROLL4 BASBSCEQUATEASMBSCINIT ASMB6SCVBLANKASMBPREPEAT BASB TREPEAT ASMBB]SOLIDS BASBSHUTTLE 3D 70Y*0NA4NA a A@7@@PU(@*H*I*M0,-300*I!r}a6-6("(ILE OR EYBOARD INPUT&64FA0KA )(%(HOW MANY POINTS ARE THERE)!s}&&9,9,9,9<@,9,..(&ENTER X,Y,Z COORDINATES FOR EACH POINTF-@(POINT '!t}068,-968,-B68,-F 7($(HOW MANY LINES ARE THERE(79<@,"&(&(NOW ENTER POINT INFORMATION,!u}(FOR EACH LINE.6n-@( (LINE 0( FROM POINT4E68<,-U( TO POINTYj68<@,-!v}n @?(+(DO YOU WANT TO SAVE THIS OBJECT/?4YAPJ0NA T!!***************************^!!!w}* TIME FOR NEW PLOT *h!!***************************r((((ENTER OBSERVER LOCATION X,Y,Z|( OR FOR EDIT !x}A@6-@ ,(,(!ENTER COORDINATES LOOKED AT X,Y,Z A.((ENTER ZOOM FACTO!y}R& A0*. 068,-!68,-068,-)6-@4Y)AY!!***********!z}****************!!* CALCULATE PERSPECTIVE *!!*************************** 6-&6-&6-&.6-M:$%$!{}%$,"".6-= 6-'6-'6-')6-M:@&$,)6-M:@&$,! 6-%$6-%$!6!|}-%$:-6-8,#6-8,,6-8,6 A: &(-(8,"Ap02 6-8,6-8,!}}6-8,( A2 Ap:  A@D!!***************************N!!* IS THE POINT VISIBLE? *X!!*******!~}********************b*68,-@6-&"6-&*6-&l$%$%$!$v68,-$!!********!}*******************!!* NOW CALC PLOT COORDS *!!***************************6-'+$%$%$,! 6-%$6!}-%$!6-%$"A &&68<@,-++&,$&+&,$,'68<@,-+&,'$&&68<@,-!}++&,$%+&,$,'68<@,-+&,'$!!***************************!!* SCALE THE IMAGE *!!*****!}**********************6-AP$- !!68<@,-8<@,$!!68<@,-8<@,$  !}*"6-A`&8<@,A6-@&8<@,O-@m68<@,-8<@,%68<@,!}-8<@,% 4!!***************************>!!* NOW DRAW THE IMAGE! *H!!***************************R5 +!}@$'0@1@5 \9 4Y9(@ M0,0*D480,0*D480,288*D0,288*D0,0fI-@56-!}88<,,%88<@,,I"Ap"@A zl6-6-/88<,,"@6!}-8<,Q6-8<@,b6-8<,l A 66-8<@,%6-8<,66-8<@,Q 6-8,!}6-8,6-8,'6-8,06-8,96-8,E6-Q6-C6-+%,'@'6-+%,'@96-+%,'@!}C A.8,!6-6-$6-. A P 6-6-6-%6-%@% @A  6-6!}-6- Ab Ap-68<@,-8<@,$%M68<@,-8<@,$%\68,-b6-6-!}88<,<@,C6-A&88<,<@,_6-88<@,<@,6-A&88<@,<@,!} AP4N)"Ai[(@M$@P,+A&,$@P*D$@P,+A&,$@P!}i6-%@ 4!((@ H*M0,-300*I46-@ -@6@<2A(!}@@ 33F:B2y,"@*T:,"@A@" +"(LAST PARAMETERS:$V(#( OBSERVER: !},,@( VIEWPOINT:,,L(ZOOM:V A@.!!***************************8!!* LOAD 3-D IMAGE FILE !} *B!!***************************L_@*(ENTER FILENAME TO LOAD.8 AU@@_ A!}V3@39,9,9,9<@,9,`+-@@'68,-+ j+-@@!}'68,-+ t+-@@'68,-+ ~@9<@,Q-@@/6!}8<,-<@M68<@,-Q @  A@(((FILE FORMAT ERROR!( A-(#(!} I/O ERROR - F:A,- A((CAN'T OPEN FILE!( PRESS %!!***************************!}!!* SAVE 3-D IMAGE FILE *!!***************************_@*(ENTER FILENAME TO SAVE.8 AU!}@@_ A(@%-@!(@8,% %-@!(@8,% !} %-@!(@8,% \(@-@6(@8<,N(@8<@,R \ Ap!}!!***************************(!!* EDIT THE 3-D IMAGE DATA *2!!***************************<7  (#(RINT, !}DIT OR UIT'74EAF4QA@P0PA@Z A@3POINTS:3d9-@23POI!}NT : 8,8,8,6 93n3LINES:3xT-@C3LINE : 8<, TO 8<@,G J3!}T A@>  (*(EDIT OINT OR INE OR XIT.>4LA4EA 0PAH("(ENTE!}R POINT# OR , A0H!) A@&(&(X=8,Y=8,Z=8,.($(ENTER NEW X,Y,Z OR !}. A0 68,-68,-&68,-0 AG(!(ENTER LINE# OR + A/G!) !}A@(#( FROM POINT:8<,@( TO POINT:8<@,4(*(ENTER NEW LINE POINTS OR 4 A!}&( FROM POINT:&!A68<,-&( TO POINT:&!A068<@,- A!}!!***************************!!* GRAPHICS CLIP ROUTINE *"!!***************************,o6-6-!}'6-36-?6-K6-W6-c6-o6-6  6-@ A@ !}!6-@J !6-@ A0T  6-@^  6-@ APh !6-@r !}!6-@ Ap|  6-@85%"@)%"@)%"@)%"@8$% 6-6-6-6!}-% A0 6-6-6-6-1 6-6-6-6-!6-'6-1 A0(% )!) )!) )!) )!!}($ ,/6-@$$%%%"6-!6-$$> 6-%6-%+&,$+&,'+&,+6-16-;!}*>$> 6-%6-%+&,$+&,'+&,+6-16-;*>$> 6-%6-%+&,$+&,'+&,+6-16-;*!}>$1 6-%6-%+&,$+&,'+&,+6-16-$ D2:SOLIDS.BAS%6-%+&,$+&,'+&,+6-16-;* S44-5.5-8-8-16-16-5.500-2.5-2.50-1.25-1.25-2.5-4.5-4.5-3.2-2.5-4-40441.251.252.52.55.55.52.54.5%}4.53.22.51616883.50.50.5-0.5-3.5-0.5-5.5-131417211600-6.5-7.5-2-7.518.52218135.5-6-7.5-26-%}7.5-6-7.5-20-6.5-5.52118.52218135.517143-1-9.5-9.5-19-9.5-9.5-190000002.52.51.251.252.51.5%}1.51.256.56.531.25000001.51.51.251.25001.256.56.531.2500000.2520.620.250.6587662929729%}35353636373738382828296554433221167889910101826262727283031313232333334343014%}1515161617171818141013131212912813111188252526112424252724242323222224131919202013%}1121212220214243434444423940404141391188252526112424252724242323222224131919202013$7